Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


android/app/src/main/python/able/dispatcher.py 3f7ef731b5effd9aa3a81eceea66fd6c2b56498c (3f7ef731) Text, 9.48 KB

T8b949e# SPDX-License-Identifier: MIT
T8b949e"""Chaquopy BluetoothDispatcher for RNS RNode BLE."""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72from T7ee787ableT7ee787.T7ee787queue Tff7b72import Te6edf3BLEQueueTb4b4b4, Te6edf3ble_taskTb4b4b4, Te6edf3ble_task_done
Tff7b72from T7ee787ableT7ee787.T7ee787structures Tff7b72import Te6edf3Services

Te6edf3GATT_SUCCESS Tff7b72= T79c0ff0

Te6edf3_JAVA Tff7b72= Tff7b72None


Tff7b72def Td2a8ff_javaTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72global Te6edf3_JAVA
Tff7b72if Te6edf3_JAVA Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3_JAVA
Tff7b72from T7ee787jnius Tff7b72import Te6edf3autoclass

Te6edf3bluetooth_adapter Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6ffandroid.bluetooth.BluetoothAdapterTa5d6ff"Tb4b4b4)
Te6edf3bluetooth_device Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6ffandroid.bluetooth.BluetoothDeviceTa5d6ff"Tb4b4b4)
Te6edf3bluetooth_gatt_descriptor Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6ffandroid.bluetooth.BluetoothGattDescriptorTa5d6ff"Tb4b4b4)
Te6edf3ble Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6fforg.able.BLETa5d6ff"Tb4b4b4)
Te6edf3_JAVA Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffBluetoothAdapterTa5d6ff"Tb4b4b4: Te6edf3bluetooth_adapterTb4b4b4,
Ta5d6ff"Ta5d6ffBluetoothDeviceTa5d6ff"Tb4b4b4: Te6edf3bluetooth_deviceTb4b4b4,
Ta5d6ff"Ta5d6ffBluetoothGattDescriptorTa5d6ff"Tb4b4b4: Te6edf3bluetooth_gatt_descriptorTb4b4b4,
Ta5d6ff"Ta5d6ffBLETa5d6ff"Tb4b4b4: Te6edf3bleTb4b4b4,
Ta5d6ff"Ta5d6ffENABLE_NOTIFICATION_VALUETa5d6ff"Tb4b4b4: Te6edf3bluetooth_gatt_descriptorTff7b72.Td2a8ffENABLE_NOTIFICATION_VALUETb4b4b4,
Ta5d6ff"Ta5d6ffENABLE_INDICATION_VALUETa5d6ff"Tb4b4b4: Te6edf3bluetooth_gatt_descriptorTff7b72.Td2a8ffENABLE_INDICATION_VALUETb4b4b4,
Ta5d6ff"Ta5d6ffDISABLE_NOTIFICATION_VALUETa5d6ff"Tb4b4b4: Te6edf3bluetooth_gatt_descriptorTff7b72.Td2a8ffDISABLE_NOTIFICATION_VALUETb4b4b4,
Tb4b4b4}
Tff7b72return Te6edf3_JAVA


Tff7b72def Td2a8ff_to_java_bytesTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3value Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tb4b4b4(Tffa657bytesTb4b4b4, Tffa657bytearrayTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return Tffa657listTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tb4b4b4(Tffa657listTb4b4b4, Tffa657tupleTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return Tffa657listTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72return Tffa657listTb4b4b4(Te6edf3valueTff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149AttributeErrorTb4b4b4:
Tff7b72pass
Tff7b72tryTb4b4b4:
Tff7b72return Tffa657listTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72except Tf85149TypeErrorTb4b4b4:
Tff7b72return Tb4b4b4[Te6edf3valueTb4b4b4]


Tff7b72def Td2a8ff_make_python_bluetooth_proxyTb4b4b4(Te6edf3dispatcherTb4b4b4)Tb4b4b4:
Tff7b72from T7ee787java Tff7b72import Te6edf3dynamic_proxyTb4b4b4, Te6edf3jclass

Te6edf3interface Tff7b72= Te6edf3jclassTb4b4b4(Ta5d6ff"Ta5d6fforg.able.PythonBluetoothTa5d6ff"Tb4b4b4)

Tff7b72class T56d364PythonBluetoothProxyTb4b4b4(Te6edf3dynamic_proxyTb4b4b4(Te6edf3interfaceTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3ownerTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner Tff7b72= Te6edf3owner

Tff7b72def Td2a8ffon_errorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_errorTa5d6ff"Tb4b4b4, Te6edf3msgTb4b4b4)

Tff7b72def Td2a8ffon_scan_startedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3successTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_scan_startedTa5d6ff"Tb4b4b4, Te6edf3successTb4b4b4)

Tff7b72def Td2a8ffon_scan_resultTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3resultTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_scan_completedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_scan_completedTa5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffon_servicesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3statusTb4b4b4, Te6edf3servicesTb4b4b4)Tb4b4b4:
Te6edf3services_dict Tff7b72= Te6edf3ServicesTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3status Tff7b72== Te6edf3GATT_SUCCESS Tff7b72and Te6edf3services Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3service_list Tff7b72= Tffa657listTb4b4b4(Te6edf3servicesTff7b72.Td2a8fftoArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3service_list Tff7b72= Tffa657listTb4b4b4(Te6edf3servicesTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3service_list Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3service Tff7b72in Te6edf3service_listTb4b4b4:
Te6edf3service_uuid Tff7b72= Tffa657strTb4b4b4(Te6edf3serviceTff7b72.Td2a8ffgetUuidTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fftoStringTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3services_dictTb4b4b4[Te6edf3service_uuidTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72tryTb4b4b4:
Te6edf3chars Tff7b72= Tffa657listTb4b4b4(Te6edf3serviceTff7b72.Td2a8ffgetCharacteristicsTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fftoArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3chars Tff7b72= Tffa657listTb4b4b4(Te6edf3serviceTff7b72.Td2a8ffgetCharacteristicsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3characteristic Tff7b72in Te6edf3charsTb4b4b4:
Te6edf3char_uuid Tff7b72= Tffa657strTb4b4b4(Te6edf3characteristicTff7b72.Td2a8ffgetUuidTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fftoStringTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3services_dictTb4b4b4[Te6edf3service_uuidTb4b4b4]Tb4b4b4[Te6edf3char_uuidTb4b4b4] Tff7b72= Te6edf3characteristic
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_servicesTa5d6ff"Tb4b4b4, Te6edf3statusTb4b4b4, Te6edf3services_dictTb4b4b4)

Tff7b72def Td2a8ffon_characteristic_changedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_characteristic_changedTa5d6ff"Tb4b4b4, Te6edf3characteristicTb4b4b4)

Tff7b72def Td2a8ffon_characteristic_readTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_gatt_releaseTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_characteristic_readTa5d6ff"Tb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3statusTb4b4b4)

Tff7b72def Td2a8ffon_characteristic_writeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_gatt_releaseTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_characteristic_writeTa5d6ff"Tb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3statusTb4b4b4)

Tff7b72def Td2a8ffon_descriptor_readTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3descriptorTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_gatt_releaseTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_descriptor_readTa5d6ff"Tb4b4b4, Te6edf3descriptorTb4b4b4, Te6edf3statusTb4b4b4)

Tff7b72def Td2a8ffon_descriptor_writeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3descriptorTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_gatt_releaseTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_descriptor_writeTa5d6ff"Tb4b4b4, Te6edf3descriptorTb4b4b4, Te6edf3statusTb4b4b4)

Tff7b72def Td2a8ffon_connection_state_changeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3statusTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_connection_state_changeTa5d6ff"Tb4b4b4, Te6edf3statusTb4b4b4, Te6edf3stateTb4b4b4)

Tff7b72def Td2a8ffon_bluetooth_adapter_state_changeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_bluetooth_adapter_state_changeTa5d6ff"Tb4b4b4, Te6edf3stateTb4b4b4)

Tff7b72def Td2a8ffon_rssi_updatedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rssiTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_gatt_releaseTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_rssi_updatedTa5d6ff"Tb4b4b4, Te6edf3rssiTb4b4b4, Te6edf3statusTb4b4b4)

Tff7b72def Td2a8ffon_mtu_changedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3mtuTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_gatt_releaseTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_mtu_changedTa5d6ff"Tb4b4b4, Te6edf3mtuTb4b4b4, Te6edf3statusTb4b4b4)

Tff7b72return Te6edf3PythonBluetoothProxyTb4b4b4(Te6edf3dispatcherTb4b4b4)


Tff7b72class T56d364BluetoothDispatcherTb4b4b4:
T8b949e"""Subset of able.BluetoothDispatcher used by RNS RNode BLEConnection."""

Tff7b72def Tff7b72__init__Tb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3queue_timeoutTb4b4b4: Tffa657float Tff7b72= T79c0ff0.5Tb4b4b4,
Te6edf3enable_ble_codeTb4b4b4: Tffa657int Tff7b72= T79c0ff0xAB1ETb4b4b4,
Tff7b72*Tff7b72*Te6edf3_kwargsTb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3java Tff7b72= Te6edf3_javaTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffqueue_timeout Tff7b72= Te6edf3queue_timeout
Tff7b72selfTff7b72.Td2a8ffenable_ble_code Tff7b72= Te6edf3enable_ble_code
Tff7b72selfTff7b72.Td2a8ffqueue Tff7b72= Te6edf3BLEQueueTb4b4b4(Te6edf3timeoutTff7b72=Te6edf3queue_timeoutTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_events_interface Tff7b72= Te6edf3_make_python_bluetooth_proxyTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_ble Tff7b72= Te6edf3javaTb4b4b4[Ta5d6ff"Ta5d6ffBLETa5d6ff"Tb4b4b4]Tb4b4b4(Tff7b72selfTff7b72.Td2a8ff_events_interfaceTb4b4b4)

Tff7b72def Td2a8ffdispatchTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3event_nameTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3event_nameTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Tffa657callableTb4b4b4(Te6edf3handlerTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3handlerTb4b4b4(Tff7b72*Te6edf3argsTb4b4b4)
Tff7b72return Tff7b72None

Tf0883e@property
Tff7b72def Td2a8ffgattTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bleTff7b72.Td2a8ffgetGattTb4b4b4(Tb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffadapterTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3_javaTb4b4b4(Tb4b4b4)Tb4b4b4[Ta5d6ff"Ta5d6ffBluetoothAdapterTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffgetDefaultAdapterTb4b4b4(Tb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffbonded_devicesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3java Tff7b72= Te6edf3_javaTb4b4b4(Tb4b4b4)
Te6edf3adapter Tff7b72= Tff7b72selfTff7b72.Td2a8ffadapter
Tff7b72if Te6edf3adapter Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Te6edf3ble_types Tff7b72= Tb4b4b4(
Te6edf3javaTb4b4b4[Ta5d6ff"Ta5d6ffBluetoothDeviceTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffDEVICE_TYPE_LETb4b4b4,
Te6edf3javaTb4b4b4[Ta5d6ff"Ta5d6ffBluetoothDeviceTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffDEVICE_TYPE_DUALTb4b4b4,
Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3devices Tff7b72= Tffa657listTb4b4b4(Te6edf3adapterTff7b72.Td2a8ffgetBondedDevicesTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fftoArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3devices Tff7b72= Tffa657listTb4b4b4(Te6edf3adapterTff7b72.Td2a8ffgetBondedDevicesTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Tb4b4b4[Te6edf3dev Tff7b72for Te6edf3dev Tff7b72in Te6edf3devices Tff7b72if Tffa657intTb4b4b4(Te6edf3devTff7b72.Td2a8ffgetTypeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72in Te6edf3ble_typesTb4b4b4]

Tff7b72def Td2a8ffconnect_by_device_addressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3addressTb4b4b4: Tffa657strTb4b4b4, Te6edf3autoconnectTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3java Tff7b72= Te6edf3_javaTb4b4b4(Tb4b4b4)
Te6edf3address Tff7b72= Tffa657strTb4b4b4(Te6edf3addressTb4b4b4)Tff7b72.Td2a8ffupperTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3javaTb4b4b4[Ta5d6ff"Ta5d6ffBluetoothAdapterTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffcheckBluetoothAddressTb4b4b4(Te6edf3addressTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3addressTffd700}Ta5d6ff is not a valid Bluetooth addressTa5d6ff"Tb4b4b4)
Te6edf3adapter Tff7b72= Tff7b72selfTff7b72.Td2a8ffadapter
Tff7b72if Te6edf3adapter Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72raise Tf85149OSErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth adapter unavailableTa5d6ff"Tb4b4b4)
Te6edf3device Tff7b72= Te6edf3adapterTff7b72.Td2a8ffgetRemoteDeviceTb4b4b4(Te6edf3addressTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconnect_gattTb4b4b4(Te6edf3deviceTb4b4b4, Te6edf3autoconnectTb4b4b4)

Tff7b72def Td2a8ffconnect_gattTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3deviceTb4b4b4, Te6edf3autoconnectTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_bleTff7b72.Td2a8ffconnectGattTb4b4b4(Te6edf3deviceTb4b4b4, Te6edf3autoconnectTb4b4b4)

Tff7b72def Td2a8ffclose_gattTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_bleTff7b72.Td2a8ffcloseGattTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffdiscover_servicesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3gatt Tff7b72= Tff7b72selfTff7b72.Td2a8ffgatt
Tff7b72if Te6edf3gatt Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Te6edf3gattTff7b72.Td2a8ffdiscoverServicesTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffenable_notificationsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3enableTff7b72=Tff7b72TrueTb4b4b4, Te6edf3indicationTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3java Tff7b72= Te6edf3_javaTb4b4b4(Tb4b4b4)
Te6edf3gatt Tff7b72= Tff7b72selfTff7b72.Td2a8ffgatt
Tff7b72if Te6edf3gatt Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72if Tff7b72not Te6edf3gattTff7b72.Td2a8ffsetCharacteristicNotificationTb4b4b4(Te6edf3characteristicTb4b4b4, Te6edf3enableTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72if Tff7b72not Te6edf3enableTb4b4b4:
Te6edf3descriptor_value Tff7b72= Te6edf3javaTb4b4b4[Ta5d6ff"Ta5d6ffDISABLE_NOTIFICATION_VALUETa5d6ff"Tb4b4b4]
Tff7b72elif Te6edf3indicationTb4b4b4:
Te6edf3descriptor_value Tff7b72= Te6edf3javaTb4b4b4[Ta5d6ff"Ta5d6ffENABLE_INDICATION_VALUETa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3descriptor_value Tff7b72= Te6edf3javaTb4b4b4[Ta5d6ff"Ta5d6ffENABLE_NOTIFICATION_VALUETa5d6ff"Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3descriptors Tff7b72= Tffa657listTb4b4b4(Te6edf3characteristicTff7b72.Td2a8ffgetDescriptorsTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fftoArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3descriptors Tff7b72= Tffa657listTb4b4b4(Te6edf3characteristicTff7b72.Td2a8ffgetDescriptorsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3descriptor Tff7b72in Te6edf3descriptorsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwrite_descriptorTb4b4b4(Te6edf3descriptorTb4b4b4, Te6edf3descriptor_valueTb4b4b4)
Tff7b72return Tff7b72True

Tf0883e@ble_task
Tff7b72def Td2a8ffwrite_descriptorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3descriptorTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Te6edf3payload Tff7b72= Te6edf3_to_java_bytesTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72if Tff7b72not Te6edf3descriptorTff7b72.Td2a8ffsetValueTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3gatt Tff7b72= Tff7b72selfTff7b72.Td2a8ffgatt
Tff7b72if Te6edf3gatt Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Te6edf3gattTff7b72.Td2a8ffwriteDescriptorTb4b4b4(Te6edf3descriptorTb4b4b4)

Tf0883e@ble_task
Tff7b72def Td2a8ffwrite_characteristicTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3valueTb4b4b4, Te6edf3write_typeTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3payload Tff7b72= Te6edf3_to_java_bytesTb4b4b4(Te6edf3valueTb4b4b4)
Te6edf3write_type_int Tff7b72= Tffa657intTb4b4b4(Te6edf3write_type Tff7b72or T79c0ff0Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_bleTff7b72.Td2a8ffwriteCharacteristicTb4b4b4(Te6edf3characteristicTb4b4b4, Te6edf3payloadTb4b4b4, Te6edf3write_type_intTb4b4b4)

Tf0883e@ble_task
Tff7b72def Td2a8ffrequest_mtuTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3mtuTb4b4b4: Tffa657intTb4b4b4)Tb4b4b4:
Te6edf3gatt Tff7b72= Tff7b72selfTff7b72.Td2a8ffgatt
Tff7b72if Te6edf3gatt Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Te6edf3gattTff7b72.Td2a8ffrequestMtuTb4b4b4(Tffa657intTb4b4b4(Te6edf3mtuTb4b4b4)Tb4b4b4)

Tf0883e@ble_task_done
Tff7b72def Td2a8ffon_gatt_releaseTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_errorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149OSErrorTb4b4b4(Tffa657strTb4b4b4(Te6edf3msgTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffon_scan_startedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3successTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_scan_completedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_deviceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3deviceTb4b4b4, Te6edf3rssiTb4b4b4, Te6edf3advertisementTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_connection_state_changeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3statusTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_bluetooth_adapter_state_changeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_servicesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3statusTb4b4b4, Te6edf3servicesTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_characteristic_changedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_characteristic_readTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_characteristic_writeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_descriptor_readTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3descriptorTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_descriptor_writeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3descriptorTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_rssi_updatedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rssiTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffon_mtu_changedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3mtuTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72pass


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────